package bite;

import java.util.Scanner;

/**
 * Creared with IntelliJ IDEA.
 * Description:链接：https://www.nowcoder.com/questionTerminal/610e6c0387a0401fb96675f58cda8559
 * 来源：牛客网
 *
 * 今年公司年会的奖品特别给力，但获奖的规矩却很奇葩：
 * 1. 首先，所有人员都将一张写有自己名字的字条放入抽奖箱中；
 * 2. 待所有字条加入完毕，每人从箱中取一个字条；
 * 3. 如果抽到的字条上写的就是自己的名字，那么“恭喜你，中奖了！”
 * 现在告诉你参加晚会的人数，请你计算有多少概率会出现无人获奖？
 * User:yxd
 * Date:2022-06-12
 * Time:23:43
 */
public class Day35_2 {
    public static void main(String[] args) {
        long[] d = new long[21];//没有中奖的情况
        d[0] = 0;
        d[1] = 0;//一个人必然中奖
        d[2] = 1;//两个人只有一个人会中奖
        long[] a = new long[21];//所有的情况总数 An N
        a[0] = 1;
        a[1] = 1;
        a[2] = 2;
        for(int i = 3;i <= 20;i ++){
            //不中奖的情况:当A没有抽到自己的名字:A可能会抽到B的名字,B如果抽到了A的名字,那么剩下人的抽奖就和AB这两个人没有任何关系了,D(n)表示所有不中奖的情况
            //就是D(n- 1),而如果B没有拿到A的名字,那么剩下人的情况就只和A无关,还是会和B有关系,因此就是D(n - 1),因此A拿到B的情况就是D(n - 1) + D(n - 2)这些情况,而如果放拿到其他人的名字也是同样的情况,
            //因此所有人抽不中奖的情况就是(D(n - 1) + D(n - 2)) * (n - 1);
            d[i] = (i - 1) * (d[i - 1] + d[i - 2]);
            a[i] = i * a[i - 1];//阶乘

        }
        Scanner input = new Scanner(System.in);
        while(input.hasNextInt()){
            int n = input.nextInt();
            System.out.printf("%.2f%%\n", 100.0 * d[n] / a[n]);//按格式输出
        }


    }
}
